iT邦幫忙

2023 iThome 鐵人賽

DAY 30
0
Mobile Development

用 SwiftUI 魔法變出 Leetcode 刷題知識學習 App!系列 第 30

Day 30: SwiftUI LeetCode 演算法 App 寫測試 Test 與完賽感想

  • 分享至 

  • xImage
  •  

沒想到居然完成了三十天挑戰,最後一篇來記錄一下本次參賽感想。

順便教學一下 SwiftUI App 要如何進行測試。

如何寫測試

在前面篇幅裡介紹 SwiftUI 的專案結構裡面,有兩個是測試檔案,不知道大家還記不記得,分別是:

  • LearnHappyLeetCodeTests: XCTestCase
  • LearnHappyLeetCodeUITests: XCTestCase

第一個是專門寫單元測試,第二個是寫 UI 測試。

單元測試就是單純測試函式邏輯,由輸入輸出去判斷是不是我們想要的結果。

而 UI 測試則是會啟動 App 去做一些操作,最後驗證畫面上顯示的內容是不是如我們預期。

而這裡我們要測試 SwiftUI 以畫面為主,會用 UI Test 進行。

簡單測試一下由 LeetCode 題目列表跳轉到內頁是否成功。

func testNavigation() throws {
        let app = XCUIApplication()
        app.launch()
        
        let goToDetailViewButton = app.buttons["Two Sum"]
        XCTAssert(goToDetailViewButton.exists)
        
        goToDetailViewButton.tap()
       
        XCTAssert(app.staticTexts["Two Sum"].exists)
    }

前兩行表示開啟 App 程式。

let app = XCUIApplication()
app.launch()

而中間則是確認 Two Sum 這題是否存在。XCTAssert 是用來驗證是不是我們想要的結果,如是則會往下進行,最後會以 Success 成功測試回報。

 let goToDetailViewButton = app.buttons["Two Sum"]
 XCTAssert(goToDetailViewButton.exists)

接下來就是點擊進內頁驗證 Two Sum 是否存在。

goToDetailViewButton.tap()
XCTAssert(app.staticTexts["Two Sum"].exists)

測試成功後則會有綠勾勾表示這個測試合格沒有錯誤。

跑 UI 測試的過程需要啟動裝置它會自動啟動 App 執行測試需要的動作,最後關閉 App,在這裡可以看到它點了 Two Sum 並成功進入詳細頁。

基本上測試就是三原則,填入測試資料→運行 UI 流程動作→驗證結果

這裡比較簡單是不用特別填入測試資料,因為情境就只有一個頁面同一份資料。

所以我們學會了 UI Test 去測試 SwiftUI!

更多教學參照:Introduction to UI Testing in SwiftUI Using XCTest Framework

完賽感想

很早之前就知道有「鐵人賽」活動了,一直都覺得自己不可能連續三十天輸出發技術文,因為難度太高。

過了好幾年真的是恰巧要學 SwiftUI,遇到讀書會夥伴推動這個三十天挑戰,才決定自己要試試看。

本以為那時候加入是八月底左右覺得離開賽 9 月 16 日還早,我還有很多時間醞釀 SwiftUI 的文章,但是其實後來發現自己的知識量不足,在開賽前其實有無數次想要退賽,後來因為有先準備了五篇文章,決定還是賭一賭試試看。

過程發現即使自己超前,但還是只有超前一兩天其實還是很趕,中間還有當天立即輸出,因為對 SwiftUI 底子不夠,以及 LeetCode 的底子也都還不透徹,這兩個主題中穿插其實生活過得很硬,幾乎把下班時間跟假日都投注在上面惡補知識。

真的沒想到自己可以順利完賽,這中間其實學習到很多知識,有些東西雖然短短一篇文章,但其實收集了很多知識文章,以及每日每夜不斷在 Xcode 上 debug 才有的成果。

ChatGPT 寫文有用嗎?

參賽前有看到官方不介意利用生成式的方法寫文(當然不能全抄),我一開始有借用了 ChatGPT 的力量去架構這個系列文,發現算是有幫助的,對於零基礎沒方向的人,它能提供明確的學習方向。

但是,真的不能全靠 ChatGPT,當學的越來越深後,會發現 ChatGPT 輸出的內容開始出現錯誤,我差不多在第一週最基礎的學習過後,發現 ChatGPT 能幫助的地方越來越少,也可能跟我的主題偏進階有關係。

結論:AI 機器人只能做基礎輔助,要開發 App 還是要靠自己!(恭喜工程師現在還不會被取代哈哈)

下次參賽改進項目

下次如果要參賽的話,我還是希望能夠把系列文寫的更系統,應該要事先醞釀囤積文章(如果官方沒改規定不限制),因為三十天即時發文外加自己要上班,其實能夠吸收得知識非常有限,中後期開始寫的有點走馬看花。

有些文章有點意外,比較簡單隨意的意外點閱率比較高,而寫比較認真的流量反而比較低迷,不知道是不是因為認真文字數太長導致吸引力不夠,或是標題感覺就很難導致大家不想點進去看。

如果給我重新來過一次,我會想要以開發完整 App 的方式寫文,想在寫文結束的同時還能夠完成一個 App 上架,但本次太過於趕,比較多是碎片累積知識。

總結

這次真的激勵我在學習的路上,證明自己還是可以持續有耐心學習,之前不斷懷疑工作是不是阻礙了學習,這次讓我覺得只要有心什麼事情都可以辦到,更不想中斷 SwiftUI 的學習,謝謝大家觀賞到這裡,歡迎隨時與我交流!


上一篇
Day 29: SwiftUI Search bar 搜尋 LeetCode 列表,Section 顯示演算法主題
系列文
用 SwiftUI 魔法變出 Leetcode 刷題知識學習 App!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言